//
// Reply.hpp
// ~~~~~~~~~
//
// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//

#ifndef HTTP_SERVER4_REPLY_HPP
#define HTTP_SERVER4_REPLY_HPP

#include <string>
#include <vector>
#include <boost/asio.hpp>
#include "proxycore/base/basedefines.h"

namespace proxy {

  /// A Reply to be sent to a client.
  struct Reply
  {
    /// The status of the Reply.
    enum status_type
    {
      ok = 200,
      created = 201,
      accepted = 202,
      no_content = 204,
      multiple_choices = 300,
      moved_permanently = 301,
      moved_temporarily = 302,
      not_modified = 304,
      bad_request = 400,
      unauthorized = 401,
      forbidden = 403,
      not_found = 404,
      internal_server_error = 500,
      not_implemented = 501,
      bad_gateway = 502,
      service_unavailable = 503
    } status;

    /// The headers to be included in the Reply.
    std::vector<HttpHeader> headers;

    /// The content to be sent in the Reply.
    std::string content;

    /// Convert the Reply into a vector of buffers. The buffers do not own the
    /// underlying memory blocks, therefore the Reply object must remain valid and
    /// not be changed until the write operation has completed.
    std::vector<boost::asio::const_buffer> to_buffers();

    /// Get a stock Reply.
    static Reply stock_reply(status_type status);
  };

} // namespace proxy

#endif // HTTP_SERVER4_REPLY_HPP
